package com.itheima.d6_thread_communication.demo;

import java.util.ArrayList;

class Producer extends Thread {
    private final ArrayList<String> plate;//盘子
    private static int count;//包子编号
    private static final String[] baoziType = {"韭菜肉包", "香菇鸡肉包", "小笼包"};

    public Producer(String name, ArrayList<String> plate) {
        super(name);
        this.plate = plate;
    }

    @Override
    public void run() {

        while (true) {

            synchronized (plate) { //使用共享资源plate当作锁对象

                while (plate.size() >= 100) {
                    System.out.println("现在盘子中有包子：" + plate.size()+"个，已满。" + getName() + "休息下");
                    try {
                        plate.wait(); //释放锁，代码会阻塞于此（等待）
                        //调用等待或者唤醒的方法，一定要在同步代码中，使用锁对象调用
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

                int index = (int) (Math.random() * baoziType.length);
                //生产包子
                String baozi = baoziType[index] + count++;
                //打印语句
                System.out.println(getName() + "正在做：" + baozi);
                //做好包子，放到盘子里
                plate.add(baozi);
                //通知其他人吃包子
                plate.notifyAll();
            }

            //让循环放慢速度
            try {
                Thread.sleep(300);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }


    }
}
